package com.company.zhishidian;

import org.w3c.dom.ls.LSOutput;

import java.math.BigDecimal;
import java.math.BigInteger;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.logging.SimpleFormatter;

class BaoZhLei{
    public static void main(String[] args) {
        // 1.5 之前
        Integer in = Integer.valueOf(100);
        int i = in.intValue();
        // 1.5 之后
        Integer in2 = 100;
        int i2 = in2;
        // 把Integer转成int
        int i3 = Integer.parseInt("888");
        //
        int i4 = 100;
        // 转二进制
        System.out.println(Integer.toBinaryString(i4));
        // 转八进制
        System.out.println(Integer.toOctalString(i4));
        // 转十六进制
        System.out.println(Integer.toHexString(i4));
    }
}
public class TestMath  {
    public static void main(String[] args) {
        // 求最大值
        int n1 = Math.abs(-100);
        System.out.println(n1);
        // 返回大于小数的
        double n2 = Math.ceil(12.3);
        System.out.println(n2);
        // 返回小于的数
        double n3 = Math.floor(12.5);
        System.out.println(n3);
        // 返回最大值
        int n4 = Math.max(12,13);
        System.out.println(n4);
        // 返回最小值
        int n5 = Math.min(12,13);
        System.out.println(n5);
        // 四舍五入
        double n6 = Math.round(12.5);
        System.out.println(n6);
        // 计算弧度 正弦
        double sin = Math.sin(Math.toRadians(30));
//        double sin = Math.sin(Math.PI/2);
        System.out.println(sin);
        // 求平方根
        double n7 = Math.sqrt(9);
        System.out.println(n7);
        // 求立方根
        double n8 = Math.cbrt(27);
        System.out.println(n8);
        // 求多少次幂
        double n9 = Math.pow(2,4);
        System.out.println(n9);

        // 随机数  产生【0，1）之间的随机小数
        double n10 = Math.random();
        // 20到80之间随机数 算法
        int num = (int)(Math.random()*61+20);  // 推荐这个  100 -20 = 80 80-20 = 60 60取不到 +1
        Random random = new Random(10);
        int num2 = random.nextInt(61)+20;
    }
}
class Dashu{
    public static void main(String[] args) {
//        long b1 = 9000000000000000000000l;
        BigInteger b1 = new BigInteger("9000000000000000000000");
        BigInteger b2 = new BigInteger("2");
        BigInteger b3 = b1.add(b2);  // +
        b3 = b1.subtract(b2);  // -
        b3 = b1.multiply(b2);   // *
        b3 = b1.divide(b2);    // /
        // 转成long  数组实现
        long l = b3.longValueExact();
        System.out.println(l);

        // 浮点数误差问题
        // 会有误差
        double d = 0.1 + 0.2 ;
        System.out.println(d);
        // 不会有误差
        BigDecimal d1 = new BigDecimal("0.1");
        BigDecimal d2 = new BigDecimal("0.2");
        BigDecimal d3 = d1.add(d2);
        System.out.println(d3.doubleValue());
    }
}
class TestScanner{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.next();  //  自带字符串分割函数功能，按空格分割
        String st = sc.nextLine();  // 录入一行
        System.out.println(s);
    }
}

class TestDate{
    public static void main(String[] args) throws ParseException {
        Date now = new Date();
        System.out.println(now);

        // 日期格式化类
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        String s = sdf.format(now);
        System.out.println(s);
        // 反解析时间 需注意格式一定要一致（patterm）
        String s2 = "2012-10-23 13:36:43";
        Date d = sdf.parse(s2);
        System.out.println(d);
        // 1949-10-01 是星期几
    }
}
// 日历类
class TestCalendar{
    public static void main(String[] args) {
        // 获取当前日历
        Calendar calendar = Calendar.getInstance();
        System.out.println(calendar);
        // 获取当前的星期几，因为是西方时间所以会从星期日开始算，所以是星期6
        int dayOFWeek = calendar.get(Calendar.DAY_OF_WEEK);
        System.out.println(dayOFWeek);
        System.out.println(dayOFWeek == Calendar.FRIDAY);
        //
        System.out.println("月份："+calendar.get(Calendar.MONTH));
        System.out.println("月份哪天数"+calendar.get(Calendar.MONTH));
        System.out.println("一天中的第几天"+calendar.get(Calendar.DAY_OF_YEAR));

        // 查询去年的今天
        calendar.set(2020,Calendar.OCTOBER,19);  // 同时设置年月日
        calendar.set(Calendar.DATE,13);  // 修改单个属性
        calendar.set(Calendar.YEAR,2018);

        // 新中国成立那天是星期几
        calendar.set(1949,Calendar.OCTOBER,1);
        System.out.println(calendar.get(Calendar.DAY_OF_WEEK));


        // 时间输出错误问题
        // 设置不宽松,默认是宽松的
        calendar.setLenient(false);
        calendar.set(2020,Calendar.FEBRUARY,31);
//        System.out.println(calendar.get(Calendar.DAY_OF_WEEK));

        // 这个月一共有多少天,自动获取某个月的最后一天
        int last = calendar.getActualMaximum(Calendar.DATE);
        System.out.println(last);

        // Date 转成 Calendar
        Date now = new Date();
        calendar.setTime(now);
        // Calender 转成 Date
        Date newDate = calendar.getTime();
        // 用时间戳设置时间
        calendar.setTimeInMillis((now.getTime()));
        Date d2 = new Date(calendar.getTimeInMillis());

    }

}
//  lianxi
class Student implements Comparable<Student>{
   private String name;
   private int age = 0;

    public Student(String name) {
        this.name = name;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    @Override
    public int compareTo(Student o) {
        return this.age - o.age;
    }
}
class LianXi{
    /*
        5 个学生对象
        年龄不要复值，先赋值姓名
        生成1990-2010 之间的随机数 作为出生年份
        计算当前的年龄，给数组的学生对象赋值
        按照年龄大小升序排序
     */
    public static void main(String[] args) {
        Student[] arr = new Student[5];
        for (int i = 0; i < arr.length; i++) {
            arr[i] = new Student("zhangsan"+i);
        }
        // 自己的
//        int[] year = new int[5];
//        Random random = new Random(1);
//        for (int i=0;i<year.length;i++){
//            year[i] = random.nextInt(21)+1990;
//        }
//        SimpleDateFormat sdf = new SimpleDateFormat("yyyy");
//        String s = sdf.format(new Date());
//        int years = Integer.valueOf(s);
//        for (int i=0;i<year.length;i++){
//            arr[i].setAge(years-year[i]);
//        }
//
//        for (int i = 0; i < arr.length-1; i++) {
//            int min = i;
//            boolean blag = true;
//            for (int j = i+1; j < arr.length; j++) {
//                if(arr[min].getAge()>arr[j].getAge()){
//                     min = j;
//                     blag = false;
//                }
//            }
//            if(blag){
//                break;
//            }
//            Student temp = arr[i];
//            arr[i] = arr[min];
//            arr[min] = temp;
//        }
//
//        for (Student i:arr) {
//            System.out.println(i.toString());
//        }
        // 老师的
        // 生成随机数放入日期
        for (Student stu:arr) {
            int year = (int)(Math.random()*(2010-1990+1)+1990);
            Calendar c = Calendar.getInstance();
            int age = c.get(Calendar.YEAR)-year;
            stu.setAge(age);
        }
        // 排序
        Arrays.sort(arr);
        System.out.println(Arrays.toString(arr));

        // 按姓名降序
        // 第一种 labamda 表达式
        Arrays.sort(arr,(x,y)->{return y.getName().compareTo(x.getName());});
        // 第二种 匿名内部类
        Arrays.sort(arr, new Comparator<Student>() {
                    @Override
                    public int compare(Student o1, Student o2) {
                        return o2.getName().compareTo(o1.getName());
                    }
                }
        );
        System.out.println(Arrays.toString(arr));

        System.out.println();

    }
}
class TESt{
    public static void main(String[] args) {
        Calendar cn = Calendar.getInstance();
        cn.set(1999,Calendar.JANUARY,13);
        System.out.println(cn.get(Calendar.SHORT));
        Date now = cn.getTime();
        System.out.println(now);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        String s = sdf.format(now);
        System.out.println(s);

    }
}
